package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.ProgramaDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.business.model.UserVO;
import com.cs.paoyer.administration.exception.AdministrationUserException;
import com.cs.paoyer.administration.util.AccessControl;
import com.cs.paoyer.common.exception.CommonUserException;
import com.cs.paoyer.common.exception.UserException;

import java.io.IOException;

import java.sql.SQLException;

import java.util.Collection;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;



public class BuscarBeneficiarioAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
	ActionMessages messages = new ActionMessages();
	try
	{
		AccessControl access = new AccessControl();
		access.validateAccess(mapping,request,response);
		//ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
		BeneficiarioVO objBeneVO = new BeneficiarioVO();
		String strDocumento = request.getParameter("documento"); 
		//String strDocumento = (String) request.getAttribute("documento"); 
		String strTipoDocumento = request.getParameter("tipoDocumento");
		String strPrimerNombre =  request.getParameter("primer_nombre");
		String strSegundoNombre =  request.getParameter("segundo_nombre");
		String strPrimerApellido =  request.getParameter("primerApellido");
		String strSegundoApellido =  request.getParameter("segundoApellido");
		String strCodePrograma = request.getParameter("codePrograma");
		String strCodeSubPrograma = request.getParameter("codeSubPrograma");
		String strPoseeBene =  request.getParameter("tienebene");
		String strDesdeBOT = request.getParameter("Desde");
		String strHastaBOT = request.getParameter("Hasta");
		String busco = request.getParameter("busco");
		HttpSession session = request.getSession();
		UserVO user=(UserVO)session.getAttribute("userInfo");
		session.removeAttribute("Option");
        
		Object regreso = request.getParameter("regresar");
		if((String)regreso == null)
		  session.removeAttribute("listabene");
        
		request.removeAttribute("listabene");
		request.removeAttribute("grupo_familiar");
		request.setAttribute("msg","");
		List beneficiarios = null;
        
		if((Object)busco != null){
		  if(busco.equals("true")){
			if(request.getParameter("search")!=null)
			{
				if(strDocumento != null){
					objBeneVO.setNumeroDocumento(strDocumento);
					objBeneVO.setTipoDocumento(strTipoDocumento);
					objBeneVO.setNombre1(strPrimerNombre);
					objBeneVO.setNombre2(strSegundoNombre);
					objBeneVO.setPrimerApellido(strPrimerApellido);
					objBeneVO.setSegundoApellido(strSegundoApellido);
					objBeneVO.setPoseeBeneficios(strPoseeBene);
					objBeneVO.setDesdeBOT(strDesdeBOT);
					objBeneVO.setHastaBOT(strHastaBOT);
					BeneficiarioDAO objBeneDAO;
					try
					{
					  objBeneDAO = new BeneficiarioDAO(cf);
					  beneficiarios = (List)objBeneDAO.findBeneficiarioByCriterea(objBeneVO,"buscarBeneficiario",strCodePrograma,strCodeSubPrograma);
					  cf.closeConnection(objBeneDAO.getConn());
                      
					}catch(SQLException e){
						System.err.println("/******** TDSUB - cwsub");
						e.printStackTrace();
						System.err.println("TDSSPE - cwsub ********/");
					}
					if(beneficiarios != null){
					  if(beneficiarios.size() > 0){
						session.setAttribute("listabene",beneficiarios);
					  }else
					  {
						request.setAttribute("msg","No se encontraron registros..");
					  }
					}
				}
			}
		  }
		}
		// Mostrar programas y subprogramas
		
		Object codePrograma =  (Object)request.getParameter("code");
		Collection programas=null;
		Collection subprogramas=null;
		ProgramaDAO objProgramaDAO;
		ProgramaVO objProgramaVO =  new ProgramaVO();
		SubProgramaDAO objSubProgramaDAO;
		SubProgramaVO objSubProgramaVO =  new SubProgramaVO();
		Object pro = request.getAttribute("programas");
		if(pro == null){ 
			try
			{
				objProgramaDAO = new ProgramaDAO(cf);
				//Lista Modificada
				programas = objProgramaDAO.findProgramaByCriterea(objProgramaVO,user.getUserGroupName(),user.getCode(),user.getCodeArea());
				//Lista original
				//programas = objProgramaDAO.findProgramaByCriterea(objProgramaVO,user.getCode(),user.getUserGroupName(),user.getCodeArea());
				cf.closeConnection(objProgramaDAO.getConn());
			}catch(SQLException e){
				System.err.println("/******** TDSUB - cwsub");
				e.printStackTrace();
				System.err.println("TDSSPE - cwsub ********/");
			}
            
			if(programas.size() > 0){
				request.setAttribute("programas",programas);
			}
		} 
        
		if(codePrograma != null)
		{
		  request.removeAttribute("subprogramas");
		  String codpro = (String)codePrograma;
		  if(!codpro.equals("nulo"))
		  {
			try
			{
			  objSubProgramaVO.setCodePrograma(new Long((String)codePrograma));
			  objSubProgramaDAO = new SubProgramaDAO(cf);
			  subprogramas = objSubProgramaDAO.findSubProgramaByCriterea(objSubProgramaVO,user.getCode(), user.getUserGroupName(),user.getCodeArea());
			  cf.closeConnection(objSubProgramaDAO.getConn());
			}catch(SQLException e){
				System.err.println("/******** TDSUB - cwsub");
				e.printStackTrace();
				System.err.println("TDSSPE - cwsub ********/");
			}
			if(subprogramas.size() > 0){
			  request.setAttribute("subprogramas",subprogramas);
			}
		  }
		}
		request.removeAttribute("actualizo");
		request.removeAttribute("noactualizo");
  
	}catch (UserException ue) 
	{
		messages.add("msgWarn",  new ActionMessage("loginForm.message."																+ ue.getExceptionVO().getId()));
		saveMessages(request, messages);
		if(ue.getExceptionVO().getId()==AdministrationUserException.ENDED_SESSION)
		{       
			response.sendRedirect(request.getContextPath()+"/index.jsp");
		}
		else if(ue.getExceptionVO().getId()==CommonUserException.NOT_ALLOWED_RESOURCE)
		{
			response.sendRedirect(request.getContextPath()+"/admin/tile/invalidatedResource.jsp");
		}
		else
		{
			return mapping.getInputForward();
		}
      
	}
	return mapping.findForward("success");
  }
}